package com.ken.apollo.domain.query;

import lombok.Data;

/**
 * 基础查询对象
 * 包含分页相关的通用字段
 *
 * @author Ken
 * @since 2024-01-01
 */
@Data
public class BaseQuery {

    /**
     * 当前页码，默认第1页
     */
    private Integer pageNum = 1;

    /**
     * 每页显示条数，默认10条
     */
    private Integer pageSize = 10;

    /**
     * 排序字段
     */
    private String orderBy;

    /**
     * 排序方向：asc/desc，默认desc
     */
    private String orderDirection = "desc";

    /**
     * 获取排序字符串
     * @return 排序字符串，如：create_time desc
     */
    public String getOrderByClause() {
        if (orderBy != null && !orderBy.trim().isEmpty()) {
            return orderBy + " " + (orderDirection != null ? orderDirection : "desc");
        }
        return null;
    }

    /**
     * 设置分页参数
     * @param pageNum 页码
     * @param pageSize 每页大小
     */
    public void setPage(Integer pageNum, Integer pageSize) {
        this.pageNum = pageNum != null && pageNum > 0 ? pageNum : 1;
        this.pageSize = pageSize != null && pageSize > 0 ? pageSize : 10;
    }

    /**
     * 获取分页偏移量
     * @return 偏移量
     */
    public Integer getOffset() {
        return (pageNum - 1) * pageSize;
    }
}
